package rdd01.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark_Sample {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setMaster("local[*]").setAppName("FlatMap")
    val sc=new SparkContext(sparkConf)
    val rdd:RDD[Int] = sc.makeRDD(List(1, 2, 3, 4,5,6,7,8,9,0), 2)
    /*sample算子需要传递三个参数
    *      第一个参数表示抽取数据后是否将数据返回true(放回)或者false
    *      第二参数表示每条数据会被抽取的概率
    *       第三个参数表示被抽取数据随机算法的种子，如果不传递第三个参数，那么使用的是当前系统时间
    * */
    println(rdd.sample(
      true,
      0.5,
      3
    ).collect().mkString(","))
    //distinct算子（去除重复的算子）
    val rdd2=sc.makeRDD(List(1,2,3,4,1,2,3,4))
    val rdd3: RDD[Int] = rdd2.distinct()
    rdd3.collect().foreach(println)
    //coalesce()算子
    //原分区
//    val rdd4=sc.makeRDD(List(1,2,3,4,5,6),2)
//    val newRDD:RDD[Int]=rdd4.coalesce(3)
//    newRDD.saveAsTextFile("out2")
    //缩减分区
//    val rdd4=sc.makeRDD(List(1,2,3,4,5,6),3)
//    val newRDD:RDD[Int]=rdd4.coalesce(2,true)
//    newRDD.saveAsTextFile("out3")
    //扩大分区
    val rdd4=sc.makeRDD(List(1,2,3,4,5,6),3)
    val newRDD:RDD[Int]=rdd4.repartition(4)
    newRDD.saveAsTextFile("out4")

    sc.stop()
  }

}
